#pragma once

#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

void MyDaemon()
{
    // 1. 忽略信号: SIGPIPE SIGCHLD
    signal(SIGPIPE, SIG_IGN);
    signal(SIGCHLD, SIG_IGN);

    // 2. 避免成为组长进程
    if(fork() > 0)
        exit(0);

    // 3. 调用setsid
    setsid();
    // 4. 重定向标准输入、输出、错误；守护进程不能直接向显示器打印消息
    int dev_null = open("/dev/null", O_RDONLY | O_WRONLY); // <fcntl.h>
    if(dev_null > 0)
    {
        dup2(0, dev_null);
        dup2(1, dev_null);
        dup2(2, dev_null); 
        close(dev_null);
    }
}